package com.example.demo.common;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class ImportExcel {

	/*public Map<String, Object> importUnitValidateFile(String fileName, ServletContext sc)
			throws Exception {
		// 表头
		String[] titles = { "序号", "姓名", "性别", "部门", "政治面貌", "级别", "办公室电话", "职务", "手机号码", "办公室地址", "参与专项工作组次数" };
		StringBuffer validate = new StringBuffer();
		StringBuffer fail = new StringBuffer();
		int num = 0;
		int count = 0;
		FileInputStream fileInputStream;
		fileInputStream = new FileInputStream(fileName.toString());
		Workbook book;
		Sheet sheet;
		try {
			book = Workbook.getWorkbook(fileInputStream);
			// 获得第一个工作表对象
			sheet = book.getSheet(0);
			// int i = titles.length;
			int j = sheet.getColumns();
			String columnsName[] = new String[j];
			for (int k = 0; k < j; k++) {
				Cell cell = sheet.getCell(k, 0);
				String s = cell.getContents().toString();
				if (CommonUtils.isEmpty(s)) {
					break;
				}
				columnsName[k] = s;
			}
			if (columnsName.length != titles.length) {
				validate.append("模板错误，请下载正确的模板，进行数据导入！");
				Map<String, Object> map = new HashMap<String, Object>();
				map.put("error", validate.toString());
				return map;
			}
			for (int l = 0; l < columnsName.length; l++) {
				if (!columnsName[l].equals(titles[l])) {
					// validate.append(titles[l] + "列名称或顺序有误！");
					validate.append("模板错误，请下载正确的模板，进行数据导入！");
					// throw new BusinessException(validate.toString());
					Map<String, Object> map = new HashMap<String, Object>();
					map.put("error", validate.toString());
					return map;
				}
			}
		} catch (ArrayIndexOutOfBoundsException e) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("error", "模板错误，请下载正确的模板，进行数据导入！");
			return map;
		} catch (NullPointerException e) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("error", "模板错误，请下载正确的模板，进行数据导入！");
			return map;
		}
		List<Object> list = new ArrayList<Object>();
		int bzCount = 0;
		int rownum = 1;
		Date start = null;
		for (int i1 = 1; i1 < sheet.getRows() - bzCount; i1++) {
			int empty = 0;
			StringBuffer error = new StringBuffer();
			Object vo = new Object();
			for (int j = 0; j < sheet.getColumns(); j++) {
				Cell cell = sheet.getCell(j, i1);
				// System.out.println(titles[j]+":"+cell.getContents());
				if (j == 0) {
					++rownum;
				} else if (j == 1) {
					String name = cell.getContents().trim();
					// 姓名不能超过25个字符，必填项不能为空
					if (CommonUtils.isNotEmpty(name)) {
						if (name.trim().length() > 25) {
							error.append("第" + rownum + "行中的，姓名不能超过30个字符！");
						} else {
							vo.setName(name.trim());
						}
					} else {
						error.append("第" + rownum + "行中的，姓名不能为空！");
						empty++;
					}
				} else if (j == 2) {
					// 性别
					String sex = cell.getContents().trim();
					if (CommonUtils.isEmpty(sex)) {
						fail.append("性别不能为空!");
						empty++;
					} else {
						if (sex.trim().length() > 1) {
							error.append("第" + rownum + "性别不能超过1个字符!");
						} else {
							if (sex.equals("男")) {
								vo.setSex("0");
							}
							if (sex.equals("女")) {
								vo.setSex("1");
							}
						}
					}
				} else if (j == 3) {
					// 部门
					String dept = cell.getContents().trim();
					if (CommonUtils.isEmpty(dept)) {
						fail.append("部门不能为空！");
						empty++;
					} else {
						if (dept.trim().length() > 10) {
							error.append("第" + rownum + "行中的，部门长度不能超过10个字符！");
						} else {
							// 中文转成码值
							dept = getValueByCache("DEPT", dept);
							if (CommonUtils.isNotEmpty(dept)) {
								vo.setDept(dept);
							} else {
								error.append("第" + rownum + "行中的，部门不存在！");
							}
						}
					}
				} else if (j == 4) {
					// 政治面貌
					String politicsStatus = cell.getContents().trim();
					if (CommonUtils.isEmpty(politicsStatus)) {
						fail.append("政治面貌不能为空！");
						empty++;
					} else {
						if (politicsStatus.trim().length() > 10) {
							error.append("第" + rownum + "行中的，政治面貌长度不能超过10字符！");
						} else {
							// 中文转成码值
							politicsStatus = getValueByCache("POLITICAL_LANDSCAPE", politicsStatus);
							if (CommonUtils.isNotEmpty(politicsStatus)) {
								vo.setPoliticsStatus(politicsStatus);
							} else {
								error.append("第" + rownum + "行中的，政治面貌不存在！");
							}

						}
					}
				} else if (j == 5) {
					// 级别
					String rank = cell.getContents().trim();
					if (CommonUtils.isEmpty(rank)) {
						fail.append("级别不能为空！");
						empty++;
					} else {
						if (rank.trim().length() > 20) {
							error.append("第" + rownum + "行中的，级别不能超过10个字符！");
						} else {
							// 中文转成码值
							rank = getValueByCache("JOB_LEVEL", rank);
							if (CommonUtils.isNotEmpty(rank)) {
								vo.setRank(rank);
							} else {
								error.append("第" + rownum + "行中的，级别不存在！");
							}
						}
					}
				} else if (j == 6) {
					// 办公室电话
					String phone = cell.getContents().trim();
					if (CommonUtils.isEmpty(phone)) {
						fail.append("办公室电话不能为空！");
						empty++;
					} else {
						if (phone.trim().length() > 25) {
							error.append("第" + rownum + "行中的，办公室电话不能超过25个字符！");
						} else {
							if (isPhone(phone)) {
								vo.setOfficeTel(phone);
							} else {
								error.append("第" + rownum + "行中的，办公室电话格式错误！");
							}
						}
					}
				} else if (j == 7) {
					// 职务
					String position = cell.getContents().trim();
					if (CommonUtils.isEmpty(position)) {
						fail.append("职务不能为空！");
						empty++;
					} else {
						if (position.trim().length() > 10) {
							error.append("第" + rownum + "行中的，职务不能超过10个字符！");
						} else {
							// 中文转成码值
							position = getValueByCache("LZDN_JOB", position);
							if (CommonUtils.isNotEmpty(position)) {
								vo.setPosition(position);
							} else {
								error.append("第" + rownum + "行中的，职务不存在！");
							}
						}
					}
				} else if (j == 8) {
					// 手机号码
					String mobilePhone = cell.getContents().trim();
					if (CommonUtils.isEmpty(mobilePhone)) {
						fail.append("手机号码不能为空！");
						empty++;
					} else {
						if (mobilePhone.trim().length() > 12) {
							error.append("第" + rownum + "行中的，手机号码不能超过12个字符！");
						} else {
							// 判断是否是手机号码
							if (isMobilePhone(mobilePhone)) {
								vo.setMobilePhone(mobilePhone);
							} else {
								error.append("第" + rownum + "行中的，手机号码格式错误！");
							}
						}
					}
				} else if (j == 9) {
					// 办公室地址
					String officeAddress = cell.getContents().trim();
					if (CommonUtils.isEmpty(officeAddress)) {
						fail.append("办公室地址不能为空！");
						empty++;
					} else {
						if (officeAddress.length() > 249) {
							error.append("第" + rownum + "行中的，办公室地址不能超过249字符");
						} else {
							vo.setOfficeAddress(officeAddress);
						}
					}
				} else if (j == 10) {
					// 参与专项工作组次数
					String joinworknum = cell.getContents();
					if (CommonUtils.isEmpty(joinworknum)) {
						fail.append("参与专项工作组次数不能为空！");
						empty++;
					} else {
						if (joinworknum.trim().length() > 5) {
							error.append("第" + rownum + "行中的，参与专项工作组次数不能超过5个字符！");
						} else {
							vo.setJoinWorkNum(joinworknum);
						}
					}
				}
			}
			// 判断一行是否为空
			if (empty != (titles.length - 1)) {
				if (fail.length() != 0) {
					num++;
					vo.setRemark(fail.toString());
					fail = new StringBuffer();
				}
				list.add(vo);
				count++;
				validate.append(error);
			} else {
			}
		}
		book.close();
		fileInputStream.close();
		// 如果错误信息不为空
		if (validate.length() != 0) {
			// 抛出错误信息
		} else {
			if (list.size() != 0) {
				// for (CadreManage cadremanage : list) {
				// TODO 遍历存入数据库
				// }
			} else {
				validate.append("导入文件为空，请重新上传！");
			}
		}
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("error", validate.toString());
		map.put("row", list.size());
		map.put("fail", num);
		return map;
	}*/

}
